home *** CD-ROM | disk | FTP | other *** search
- 1 REM RANDOM.BAS is in MSX BASIC with MUSIC MACRO
- 2 REM commands for the Yamaha CX5-M music computer
- 4 REM
- 5 REM*******************************************************
- 6 REM Copyright 1986 Charles Dodge, North Cape Music
- 7 REM*******************************************************
- 8 REM
- 10 CLS
- 20 DIM AP(10):DIM BP(100):DIM CP(255):DIM DP(2,255):TC=20
- 30 DIM BD(10):DIM CD(100):DIM DD(255)
- 40 DT=0:DC=0:CC=0:BC=0:AC=0:DIM CT(4)
- 50 DIM CF(4,12):DIM LAST(4):KN=50
- 60 X=RND(-TIME):LAST(1)=INT(RND(1)*32)
- 70 _INIT:_INST(1):_INST(2):_INST(3):_INST(4)
- 80 _MODI(1,5):_MODI(2,40):_MODI(3,15):_MODI(4,16)
- 100 FOR LOOP = 1 TO 4
- 110 PRINT"ENTER PITCH CLASS LIMIT OF LEVEL #";LOOP
- 120 INPUT PL(LOOP)
- 130 IF PL(LOOP)>6 THEN PRINT"TOO BIG":GOTO 120
- 140 IF PL(LOOP)<1 THEN PRINT"TOO SMALL":GOTO 120
- 150 NEXT LOOP
- 160 L=1
- 170 FOR A = 1 TO 10
- 180 GOSUB 820
- 190 IF CT(L)>PL(L) THEN GOTO 230
- 200 AC=AC+1
- 210 AP(A)=LAST(L)
- 220 NEXT
- 230 REM FRACTAL ROUTINE
- 240 SCREEN 2
- 250 FOR A = 1 TO AC
- 260 CIRCLE(DI/2,197-(AP(A)*5+20)),9
- 270 LAST(2)=AP(A)
- 280 FOR B = 1 TO 10
- 290 L=2
- 300 GOSUB 820
- 310 IF CT(L)>PL(L) THEN GOTO 570
- 320 BI=BI+1:BP(BI)=LAST(L)
- 330 CIRCLE(DI/2,197-(BP(BI)*5+20)),6
- 340 LAST(3)=BP(BI)
- 350 FOR C = 1 TO 10
- 360 L=3
- 370 GOSUB 820
- 380 IF CT(L)>PL(L) THEN GOTO 550
- 390 CI=CI+1:CP(CI)=LAST(L):IF CI=255 THEN AC=A:GOTO 590
- 400 CIRCLE(DI/2,197-(CP(CI)*5+20)),3
- 410 LAST(4)=CP(CI)
- 420 FOR D = 1 TO 10
- 430 L=4
- 440 GOSUB 820
- 450 IF CT(L)>PL(L) THEN GOTO 530
- 460 DI=DI+1
- 470 CIRCLE(DI/2,197-(LAST(L)*5+20)),.5
- 480 IF DI>255 THEN GOTO 500
- 490 DP(1,DI)=LAST(L):GOTO 520
- 500 DP(2,DI-255)=LAST(L)
- 510 IF DI=510 THEN AC = A: GOTO 590
- 520 DC=DC+1:NEXT D
- 530 DD(CI)=DC:DC=0:CT(L)=0:GOSUB 1020
- 540 CC=CC+1:NEXT C
- 550 CD(BI)=CC:CC=0:CT(L)=0:GOSUB 1020
- 560 BC=BC+1:NEXT B
- 570 BD(A)=BC:BC=0:CT(L)=0:GOSUB 1020
- 580 NEXT A
- 590 LINE (0,0)-(255,0):LINE (255,0)-(255,197):
- LINE(255,197)-(0,197):LINE(0,197)-(0,0)
- 600 DD$=INKEY$:IF DD$="" GOTO 600
- 610 REM PLAY LOOPS
- 640 FOR A = 1 TO AC
- 650 _SOUND(1,1,AP(A)+KN)
- 660 FOR B = 1 TO BD(A):BC=BC+1
- 670 _SOUND(2,1,BD(BC)+KN)
- 680 FOR C = 1 TO CD(B):CC=CC+1
- 690 IF CC>255 GOTO 770
- 700 _SOUND(3,1,(CP(CC)+KN)
- 710 FOR D = 1 TO DD(C):DC=DC+1
- 720 IF DC>255 GOTO 740
- 730 _SOUND(4,1,DP(1,DC)+KN):GOTO 760
- 740 _SOUND(4,1,DP(2,DC-255)+KN)
- 750 IF DC=510 THEN GOTO 770
- 760 NEXT D:NEXT C:NEXT B:NEXT A
- 770 _STOP(1):_STOP(2):_STOP(3):_STOP(4)
- 780 DD$=INKEY$:IF DD$="" GOTO 780
- 790 BC=0:CC=0:DC=0
- 800 GOTO 610
- 820 REM 1/F ROUTINE
- 830 LL=LAST(L):NP=0:K=16:PROBIT=.03125
- 840 J=INT(LL/K)
- 850 IF J=1 THEN LL=LL-K
- 860 U=RND(1)
- 870 IF U<PROBIT THEN J=1-J
- 880 NP=NP+J*K
- 890 K=K/2
- 900 PROBIT = PROBIT*2
- 910 IF K>=1 GOTO 840
- 920 LAST(L)=NP:TEST=NP
- 930 REM PITCH CLASS TEST
- 940 FOR I = 0 TO 11
- 950 IF INT((TEST+I)/12)=(TEST+I)/12
- THEN CF(L,I)=1:GOTO 920
- 960 NEXT I
- 970 CT(L)=0
- 980 FOR I = 0 TO 11
- 990 CT(L)=CF(L,I)+CT(L)
- 1000 NEXT I
- 1010 RETURN
- )=1:GOTO 920
- 960 NEXT I
- 970 CT(L)=0
- 980